// 配置axios
import axios from "axios"

import {MessageBox,Message,Loading} from "element-ui";

import storage from "@/utils/storage"
//导入进度条
import nprogress from 'nprogress'
import 'nprogress/nprogress.css'

let http=axios.create({
    baseURL:"/api",
    Timeout:5000,//超时设置
    withCredentials:true,//携带本地凭据 比如cookie
})
let fullScreenLoading=null;

// 1.全局的请求拦截器 对接口的请求批量进行统一处理
http.interceptors.request.use(config=>{
    nprogress.start() 
    // 先获取本地的token，然后携带给后端
    let token =storage.get("cc-token")
    // console.log(token);
    config.headers["authorization"]=token;

    // 登入的时候打开加载动画
    // 关键字 login wechatlogin
    // console.log(config)
    if(config.url.indexOf('login')!==-1 || config.url.indexOf('wechatLogin')!==-1) {
        fullScreenLoading=Loading.service({
            lock: true,
            text: 'Loading',
            spinner: 'el-icon-loading',
            background: 'rgba(0, 0, 0, 0.7)'
        })
    }
    
    // config就是所有的请求配置
    return config //放行，不return 那么不能将请求真正的发送出去
})

// 2.全局响应拦截 统一对错误进行处理
http.interceptors.response.use(config=>{
    nprogress.done()
    if(fullScreenLoading){
        fullScreenLoading.close()
        fullScreenLoading = null;
    }
    
    let{state,msg}=config.data;
    if(!state && config.config.url !== "/order/query_order_status"){
        MessageBox({
            message:msg,
            title:"温馨的❌提示:",
            type:"error"
        })
    }
    // 10022 状态码对应了token过期
    // 1004 状态码对应了session过期
    // 10026 没有权限
    // 清掉本地缓存 清掉token
    let {code}=config.data

    if(code==="10022" || code==="1004"){
        Message.error("登入过期，请重新登入")
        storage.rm("cc-token")
        location.reload()
    }
    return config //如果不return axios请求就拿不到响应结果
})

export default http;
